package Uebung02;
/**
 * Eine simple Bestandsführung
 * 
 * @author1  Andreas Schreiner
 * @author2  Kevin Morsch
 * @version 1.1-tu2
 * 
 */

public class Artikel
{
    private int bestand;
    private String bezeichnung;
    private int artikelNR;

    /**
     * assert artikelNR 
     * da Artikelnummer 4 Stellig sein Muss
     * assert bestand
     * da der bestand weder negativ noch null sein darf
     * @param artikelNR Eine vierstellige natürliche Zahl
     * @param bezeichnung Eine nichtleere Beschreibung des Artikels
     * @param bestand Eine nicht negative natürliche Zahl, welche den Bestand beschreibt
     */
    public Artikel (int artikelNR, String bezeichnung, int bestand) {

        assert artikelNR < 10000 && artikelNR > 999 : "Die Nummer muss vierstellig sein";
        assert bestand >= 0 : "Der Bestand muss größer/gleich null sein"; 
        this.artikelNR = artikelNR;
        this.bezeichnung = bezeichnung;
        this.bestand = bestand;
    }

    public Artikel (int artikelNR, String bezeichnung){
        this(artikelNR, bezeichnung, 0);
    }

    /**
     * Buchungsfunktion zum aufbuchen der Bestandsmenge
     * 
     * @param bucheZugang Aufbuchen der Bestandsmenge durch eine Zahl welche nicht 
     * kleiner/gleich 0 sein darf 
     */
    public void bucheZugang(int menge) {
        /**
         * assert bestand
         * da der bestand weder negativ noch null sein darf
         * 
         * assert menge 
         * damit im falle einer Aufbuchung, keine Abbuchung durchgeführt werden kann
         * weiterhin muss der Wert dieser Variablen größer null sein
         */
        assert menge > 0 : "Die Menge muss Größer als null sein"; 
        bestand = bestand + menge;

    }

    /**
     * Buchungsfunktion zum abbuchen der Bestandsmenge
     * 
     * @param bucheAbgang Abbuchen der Bestandsmenge durch eine Zahl welche nicht 
     * kleiner/gleich 0 sein darf 
     */
    public void bucheAbgang(int menge) {
        /**
         * assert bestand
         * da der bestand weder negativ noch null sein darf
         * 
         * assert menge 
         * damit im falle einer Abbuchung, keine Aufbuchung durchgeführt werden kann
         * weiterhin muss der Wert dieser Variablen größer null sein
         */
        assert menge > 0 : "Die Menge muss Größer als null sein";
        assert bestand - menge >= 0 : "Die Gesamtmenge muss größer/gleich null sein"; 
        bestand = bestand - menge;

    }

    /**
     * Methode zur Ausgabe des aktuellen Bestands
     */
    public int getBestand() {
        return bestand;
    }

    /**
     * Methode zur Ausgabe der Artikelbezeichnung
     */
    public String getBezeichnung() {
        return bezeichnung;
    }

    /**
     * Methode zur Ausgabe der Artikelnummer
     */
    public int getArtikelNR() {
        return artikelNR;
    }

    /**
     * Methode setBezeichnung
     *
     * @param bezeichnung Ein Parameter, welcher zur nachträglichen änderung, der Bezeichnung genutzt werden kann. Bedingung: keine leere Eingabe. 
     */
    public void setBezeichnung(String bezeichnung) {
        assert bezeichnung != null && bezeichnung.trim().length() != 0;
        this.bezeichnung = bezeichnung.trim();
    } 

    /**
     * Methode toSting
     * @param Methode zur Ausgabe der Variablen Artikelnummer, Bezeichnung und Bestand in einem String
     */
    public String toString() {
        return "Artikelnummer:" +   artikelNR   + 
               "Bezeichnung:"   +   bezeichnung + 
               "Bestand:"       +   bestand;
    }

}

